QVF 奴の名は
問題名
奴の名は
点数: 150点
難易度: 普通
概要
会社のアカウント管理にLDAPを利用しようとしています。
同僚が「LDAPサーバーを構築したのにsshできないよ〜」と言っているので、助けてあげましょう。
前提条件
- Ubuntu 22.04の環境で、LDAPサーバーが構築されている。
- aliceというユーザーがLDAPに存在するが、sshやsuができない。
- LDAPに保存してあるaliceユーザー情報を編集する必要はない。
- LDAPサーバーとLDAPを利用するクライアントは通常別々のマシンだが、今回は簡易化のために一緒にしました。この構成に特に意味はない。
- 注意事項
- LDAP(OpenLDAP)以外を用いて問題を解決してはいけない。(ローカルアカウントを作る、など)
- 既存のLDAPサーバーを修正すること。つまりDockerや仮想マシンで別途新しいOpenLDAPデーモンを実行したり外部のLDAPを利用してはいけない。
- ただトラブルシューティングの作業内容を解答するだけではなく、何が原因だったのかを解答に含めること。「xxの設定をコピペしてきたら治った」「xxを実行したら治った」だけでは減点とする。
初期状態
ssh alice@localhost
を実行してもsshができない
終了状態
ssh alice@localhost
を実行するとログインができてシェルが出てくる
解説
想定していた解法
slapdの設定と、LDAPクライアントの設定(/etc/ldap.conf
や/etc/pam.d/
)には問題がない。しかし、LDAPに存在するユーザー alice
を探そうとしても、getentコマンドでは結果が返ってこない。
getent passwd
ここで、getentなどユーザー取得をするプログラムと、LDAPサーバー間の通信に問題があると予想できる。
getentが利用するpasswdのデータ取得元は/etc/nsswitch.conf
から確認できるため、表示してみるとpasswdの行が以下のようになっている。passwd: files systemd
これではLDAPを参照しないため、以下のように変更する。
passwd: files systemd ldap
採点基準
- /etc/nsswitch.conf にLDAPを追記する(100%)